home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / BEERSRC.ZIP / LOAD256.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-30  |  2.8 KB  |  177 lines

  1.  
  2. #include <io.h>
  3. #include <fcntl.h>
  4. #include <sys\stat.h>
  5. #include <dos.h>
  6.  
  7.  
  8. #define retrace() {while(inportb(0x3da)&8); while(!(inportb(0x3da)&8));}
  9.  
  10.  
  11. char palette[768];
  12.  
  13.  
  14. void loadpic(char *file)
  15. {
  16.    int      filvar;
  17.    char     data, count;
  18.    unsigned pos, i;
  19.  
  20.  
  21.    filvar = open(file, O_RDONLY | O_BINARY, S_IREAD);
  22.    lseek(filvar, -768, SEEK_END);
  23.    if (read(filvar, palette, 768) != 768) abort();
  24.    for (i = 0; i < 768; i++) {
  25.       palette[i] = (unsigned char) palette[i]/4;
  26.    }
  27.  
  28.    lseek(filvar, 128, SEEK_SET);
  29.  
  30.    pos = 0;
  31.    while ((read(filvar, &count, 1) == 1) && (pos < 0xfa00)) {
  32.       if ((count & 0xc0) == 0xc0) {
  33.      count = count & 0x3f;
  34.      read(filvar, &data, 1);
  35.       } else {
  36.      data = count; count = 1;
  37.       }
  38.  
  39.       for (i = 0; i < count; i++) {
  40.      pokeb(0xa000, pos++, data);
  41.       }
  42.    }
  43.  
  44.    close(filvar);
  45.  
  46.  
  47. }
  48.  
  49.  
  50. void screenmode(int mode)
  51. {
  52.    struct REGPACK regs;
  53.  
  54.    regs.r_ax = mode;
  55.    intr(0x10, ®s);
  56.  
  57.    regs.r_ax = 0x0100;
  58.    regs.r_cx = 0x2000;
  59.    intr(0x10, ®s);
  60.  
  61. }
  62.  
  63. void setpalette(char *ptr)
  64. {
  65.    struct REGPACK regs;
  66.  
  67.    regs.r_ax = 0x1012;
  68.    regs.r_bx = 0;
  69.    regs.r_cx = 256;
  70.    regs.r_dx = (unsigned) ptr;
  71.    regs.r_es = FP_SEG(ptr);
  72.    intr(0x10, ®s);
  73.  
  74. }
  75.  
  76.  
  77. void setcolor(int c, int r, int g, int b)
  78. {
  79.    outportb(0x3c8, c);
  80.    outportb(0x3c9, r);
  81.    outportb(0x3c9, g);
  82.    outportb(0x3c9, b);
  83. }
  84.  
  85. void setattrib(int m)
  86. {
  87.    struct REGPACK regs;
  88.  
  89.    regs.r_ax = 0x1013;
  90.    regs.r_bx = (m << 8);
  91.    intr(0x10, ®s);
  92.  
  93. }
  94.  
  95. void setvanillapalette(int c)
  96. {
  97.    int  i;
  98.  
  99.    for (i = 0; i < 256; i++)
  100.       setcolor(i, c, c, c);
  101.  
  102. }
  103.  
  104.  
  105. void glowto(int r0, int g0, int b0)
  106. {
  107.    int  i, j;
  108.    int  r, g, b;
  109.  
  110.    for (i = 0; i < 63; i+=3) {
  111.       for (j = 0; j < 256; j++) {
  112.      r = (r0*i) / 63;
  113.      g = (g0*i) / 63;
  114.      b = (b0*i) / 63;
  115.      setcolor(j, r, g, b);
  116.       }
  117.       retrace();
  118.    }
  119. }
  120.  
  121.  
  122. void setbw(void)
  123. {
  124.    int   i;
  125.  
  126.    for (i = 1; i < 256; i++) {
  127.       setcolor(i, 63, 63, 63);
  128.    }
  129. }
  130.  
  131. void glowin(int dir)
  132. {
  133.    int   i, j;
  134.    int   r, g, b;
  135.  
  136.    if (dir) {
  137.       for (i = 0; i < 63; i+=3) {
  138.      for (j = 1; j < 256; j++) {
  139.         r = 63 - ((63 - palette[j*3 + 0]) * i) / 63;
  140.         g = 63 - ((63 - palette[j*3 + 1]) * i) / 63;
  141.         b = 63 - ((63 - palette[j*3 + 2]) * i) / 63;
  142.         setcolor(j, r, g, b);
  143.      }
  144.      retrace();
  145.       }
  146.    } else {
  147.       for (i = 0; i < 63; i+=3) {
  148.      for (j = 1; j < 256; j++) {
  149.         r = (palette[j*3 + 0] * i) / 63;
  150.         g = (palette[j*3 + 1] * i) / 63;
  151.         b = (palette[j*3 + 2] * i) / 63;
  152.         setcolor(j, r, g, b);
  153.      }
  154.      retrace();
  155.       }
  156.    }
  157.  
  158. }
  159.  
  160.  
  161. main()
  162. {
  163.    int  i;
  164.  
  165.    screenmode(0x13);
  166.  
  167.    setattrib(1);
  168.    setvanillapalette(0);
  169.    loadpic("back.pcx");
  170.    setbw();
  171.    retrace(); retrace();
  172.    glowin(1);
  173.    getch();
  174.  
  175.  
  176. }
  177.